﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace l1cs.server.utils
{
    class StringTokenizer
    {
        private string[] sp;

        private int currentPosition;

        private int maxPosition;

        /// <summary>
        /// 指定された文字列を分割します。
        /// </summary>
        /// <param name="str">分割される文字列</param>
        /// <param name="delimiters">分割文字列リスト</param>
        /// <param name="splitOption">Trueなら空文字を含める</param>
        public StringTokenizer( string str, string[] delimiters, bool splitOption )
        {
            currentPosition = 0;
            if ( splitOption )
            {
                sp = str.Split( delimiters, StringSplitOptions.None );
            }
            else
            {
                sp = str.Split( delimiters, StringSplitOptions.RemoveEmptyEntries );
            }
            maxPosition = sp.Length;
        }

        public StringTokenizer( string str, string delimiters )
            : this( str, new string[] { delimiters }, false )
        { }

        public StringTokenizer( string str, string[] delimiters )
            : this( str, delimiters, false )
        { }

        /// <summary>
        /// 指定された文字列を分割します。
        /// </summary>
        /// <param name="s">分割される文字列</param>
        public StringTokenizer( string str )
            : this( str, new string[] { " ", "\t", "\n", "\r", "\f" }, false )
        { }

        /// <summary>
        /// 分割された次の文字列を返す。
        /// </summary>
        /// <returns></returns>
        public string nextToken()
        {
            if ( currentPosition >= maxPosition )
            {
                throw new Exception();
            }
            else
            {
                return sp[currentPosition++];
            }
        }

        public bool hasMoreTokens()
        {
            if ( currentPosition >= maxPosition )
            {
                return false;
            }
            else
            {
                return true;
            }
        }

        public int countTokens()
        {
            return maxPosition;
        }
    }
}
